package com.erp.ae.domain.bo;

import com.ruoyi.common.core.web.oldDomain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 商户订单业务对象 ae_store_order
 *
 * @author erp
 * @date 2023-03-09
 */

@Data
@EqualsAndHashCode(callSuper = true)
public class AeStoreOrderBo extends BaseEntity {

    /**
     * 主键
     */
    @NotNull(message = "主键不能为空")
    private Long id;

    /**
     * 订单ID
     */
    @NotNull(message = "订单ID不能为空")
    private Long orderId;

    /**
     * 订单类型
     */
    @NotBlank(message = "订单类型不能为空")
    private String bizType;

    /**
     * 买家登录id
     */
    @NotBlank(message = "买家登录id不能为空")
    private String buyerLoginId;

    /**
     * 买家国家/地区
     */
    @NotBlank(message = "买家国家/地区不能为空")
    private String buyerCountry;

    /**
     * 买家first name
     */
    @NotBlank(message = "买家first name不能为空")
    private String buyerFirstName;

    /**
     * 买家last name
     */
    @NotBlank(message = "买家last name不能为空")
    private String buyerLastName;

    /**
     * 买家全名
     */
    @NotBlank(message = "买家全名不能为空")
    private String buyerSignerFullname;

    /**
     * 结束原因
     */
    @NotBlank(message = "结束原因不能为空")
    private String endReason;

    /**
     * 手续费金额
     */
    @NotBlank(message = "手续费金额不能为空")
    private String escrowFeeAmount;

    /**
     * 手续费币种
     */
    @NotBlank(message = "手续费币种不能为空")
    private String escrowFeeCurrencyCode;

    /**
     * 手续费率
     */
    @NotNull(message = "手续费率不能为空")
    private BigDecimal escrowFeeRate;

    /**
     * 冻结状态;NO_FROZEN:无冻结; IN_FROZEN:冻结中
     */
    @NotBlank(message = "冻结状态;NO_FROZEN:无冻结; IN_FROZEN:冻结中不能为空")
    private String frozenStatus;

    /**
     * 资金状态;NOT_PAY:未付款; PAY_SUCCESS:付款成功; WAIT_SELLER_CHECK:卖家验款
     */
    @NotBlank(message = "资金状态;NOT_PAY:未付款; PAY_SUCCESS:付款成功; WAIT_SELLER_CHECK:卖家验款不能为空")
    private String fundStatus;

    /**
     * 订单创建时间;此时间为美国太平洋时间
     */
    @NotBlank(message = "订单创建时间;此时间为美国太平洋时间不能为空")
    private String gmtCreate;

    /**
     * 订单支付时间;此时间为美国太平洋时间，和订单详情中gmtPaysuccess字段意义相同。
     */
    @NotBlank(message = "订单支付时间;此时间为美国太平洋时间，和订单详情中gmtPaysuccess字段意义相同。不能为空")
    private String gmtPayTime;

    /**
     * 最后一次订单发货时间;此时间为美国太平洋时间，已完成订单不返回时间
     */
    @NotBlank(message = "最后一次订单发货时间;此时间为美国太平洋时间，已完成订单不返回时间不能为空")
    private String gmtSendGoodsTime;

    /**
     * 订单最后更新时间;此时间为美国太平洋时间
     */
    @NotBlank(message = "订单最后更新时间;此时间为美国太平洋时间不能为空")
    private String gmtUpdate;

    /**
     * 订单结束时间;此时间为美国太平洋时间
     */
    @NotBlank(message = "订单结束时间;此时间为美国太平洋时间不能为空")
    private String gmtTradeEnd;

    /**
     * 买家备注（订单级别）
     */
    @NotBlank(message = "买家备注（订单级别）不能为空")
    private String memo;

    /**
     * 金额
     */
    @NotBlank(message = "金额不能为空")
    private String orderAmount;

    /**
     * 最小货币单位（例如人民币：分）
     */
    @NotNull(message = "最小货币单位（例如人民币：分）不能为空")
    private BigDecimal orderCent;

    /**
     * 到最小货币单元的乘积因子（例如人民币：100）
     */
    @NotNull(message = "到最小货币单元的乘积因子（例如人民币：100）不能为空")
    private Long orderCentFactor;

    /**
     * 币种
     */
    @NotBlank(message = "币种不能为空")
    private String orderCurrencyCode;

    /**
     * 默认最小精确度
     */
    @NotNull(message = "默认最小精确度不能为空")
    private BigDecimal orderDefaultFractionDigits;

    /**
     * 币种名称
     */
    @NotBlank(message = "币种名称不能为空")
    private String orderDisplayName;

    /**
     * 币种数字编码
     */
    @NotNull(message = "币种数字编码不能为空")
    private Long orderNumericCode;

    /**
     * 币种符号
     */
    @NotBlank(message = "币种符号不能为空")
    private String orderSymbol;

    /**
     * 纠纷状态;NO_ISSUE:无纠纷; IN_ISSUE:纠纷中; END_ISSUE:纠纷结束
     */
    @NotBlank(message = "纠纷状态;NO_ISSUE:无纠纷; IN_ISSUE:纠纷中; END_ISSUE:纠纷结束不能为空")
    private String issueStatus;

    /**
     * 剩余发货时间（天）
     */
    @NotBlank(message = "剩余发货时间（天）不能为空")
    private String leftSendGoodDay;

    /**
     * 剩余发货时间（小时）
     */
    @NotBlank(message = "剩余发货时间（小时）不能为空")
    private String leftSendGoodHour;

    /**
     * 剩余发货时间（分钟）
     */
    @NotBlank(message = "剩余发货时间（分钟）不能为空")
    private String leftSendGoodMin;

    /**
     * 运费佣金比例
     */
    @NotBlank(message = "运费佣金比例不能为空")
    private String logisitcsEscrowFeeRate;

    /**
     * 物流状态;WAIT_SELLER_SEND_GOODS:等待卖家发货; SELLER_SEND_PART_GOODS:卖家部分发货; SELLER_SEND_GOODS:卖家已发货; BUYER_ACCEPT_GOODS:买家已确认收货; NO_LOGISTICS:没有物流流转信息
     */
    @NotBlank(message = "物流状态;WAIT_SELLER_SEND_GOODS:等待卖家发货; SELLER_SEND_PART_GOODS:卖家部分发货; SELLER_SEND_GOODS:卖家已发货; BUYER_ACCEPT_GOODS:买家已确认收货; NO_LOGISTICS:没有物流流转信息不能为空")
    private String logisticsStatus;

    /**
     * 订单详情链接
     */
    @NotBlank(message = "订单详情链接不能为空")
    private String orderDetailUrl;

    /**
     * 订单结束原因
     */
    @NotBlank(message = "订单结束原因不能为空")
    private String orderEndReason;

    /**
     * 订单状态
     */
    @NotBlank(message = "订单状态不能为空")
    private String orderStatus;

    /**
     * 付款金额
     */
    @NotBlank(message = "付款金额不能为空")
    private String payAmount;

    /**
     * 付款币种
     */
    @NotBlank(message = "付款币种不能为空")
    private String payCurrencyCode;

    /**
     * 付款方式;migs:信用卡支付走人民币渠道; migs102:MasterCard支付并且走人民币渠道; migs101:Visa支付并且走人民币渠道; pp101:PayPal; mb: MoneyBooker渠道; tt101:Bank Transfer支付; wu101: West Union支付； wp101:Visa走美金渠道的支付; wp102:Mastercard走美金渠道的支付; qw101:QIWI支付; cybs101:Visa走CYBS渠道的支付; cybs102: Mastercard走CYBS渠道的支付; wm101:WebMoney支付; ebanx101:巴西Beloto支付
     */
    @NotBlank(message = "付款方式;migs:信用卡支付走人民币渠道; migs102:MasterCard支付并且走人民币渠道; migs101:Visa支付并且走人民币渠道; pp101:PayPal; mb: MoneyBooker渠道; tt101:Bank Transfer支付; wu101: West Union支付； wp101:Visa走美金渠道的支付; wp102:Mastercard走美金渠道的支付; qw101:QIWI支付; cybs101:Visa走CYBS渠道的支付; cybs102: Mastercard走CYBS渠道的支付; wm101:WebMoney支付; ebanx101:巴西Beloto支付不能为空")
    private String paymentType;

    /**
     * 是否手机订单
     */
    @NotBlank(message = "是否手机订单不能为空")
    private String phone;

    /**
     * 商户登录ID
     */
    @NotBlank(message = "商户登录ID不能为空")
    private String sellerLoginId;

    /**
     * 商户操作人员的登录id
     */
    @NotBlank(message = "商户操作人员的登录id不能为空")
    private String sellerOperatorLoginId;

    /**
     * 商户全名
     */
    @NotBlank(message = "商户全名不能为空")
    private String sellerSignerFullname;

    /**
     * 当前状态下的超时剩余时间（负数表示已超时时间）
     */
    @NotNull(message = "当前状态下的超时剩余时间（负数表示已超时时间）不能为空")
    private Long timeoutLeftTime;
    /**
     * 发货最终时间
     */
    @NotNull(message = "发货最终时间不能为空")
    private String leftEndGoodTime;
    /**
     * 与ERP同步状态
     */
    @NotNull(message = "与ERP同步状态不能为空")
    private Integer syncStatus;

    /**
     * 乐观锁
     */
    @NotBlank(message = "乐观锁不能为空")
    private String revision;

    /**
     * 创建人
     */
    @NotBlank(message = "创建人不能为空")
    private String createBy;

    /**
     * 创建时间
     */
    @NotNull(message = "创建时间不能为空")
    private Date createTime;

    /**
     * 更新人
     */
    @NotBlank(message = "更新人不能为空")
    private String updateBy;

    /**
     * 更新时间
     */
    @NotNull(message = "更新时间不能为空")
    private Date updateTime;


}
